package com.ahorresas.modelo.daos;

import com.ahorresas.conexion.Conexion;
import com.ahorresas.modelo.beans.PrestamoBean;
import com.ahorresas.modelo.sqls.PrestamoSql;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class PrestamoDao {
    
    Conexion conexion = new Conexion();
    Connection con;
    PrestamoSql sql = new PrestamoSql();
    
    public PrestamoBean buscarPrestamo(String idPrestamo){
        con = conexion.getConexion();
        PrestamoBean prestamo = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.buscarPrestamo());
            ps.setInt(1, Integer.valueOf(idPrestamo));
            
            ResultSet resultado = ps.executeQuery();
            if(resultado.next()){
                prestamo = new PrestamoBean();
                prestamo.setIdPrestamo(resultado.getInt("id_prestamo"));
                prestamo.setCliente(resultado.getString("cliente"));
                prestamo.setFechaPrestamo(resultado.getDate("fecha_prestamo"));
                prestamo.setValor(resultado.getDouble("valor"));
                prestamo.setCuotas(resultado.getInt("cuotas"));
                prestamo.setCuotaMinima(resultado.getDouble("cuota_minima"));
                prestamo.setVigencia(resultado.getInt("vigencia"));
                prestamo.setEstado(resultado.getString("estado"));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        finally{
            conexion.cerrarConexion(con);
        }
        return prestamo;
    }
    
    public List<PrestamoBean> listarPrestamos(){
        con = conexion.getConexion();
        List<PrestamoBean> listaPrestamos = new ArrayList<>();
        PrestamoBean prestamo = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.listarPrestamos());
            ResultSet resultado = ps.executeQuery();
            while(resultado.next()){
                prestamo = new PrestamoBean();
                prestamo.setIdPrestamo(resultado.getInt("id_prestamo"));
                prestamo.setCliente(resultado.getString("cliente"));
                prestamo.setFechaPrestamo(resultado.getDate("fecha_prestamo"));
                prestamo.setValor(resultado.getDouble("valor"));
                prestamo.setCuotas(resultado.getInt("cuotas"));
                prestamo.setCuotaMinima(resultado.getDouble("cuota_minima"));
                prestamo.setVigencia(resultado.getInt("vigencia"));
                prestamo.setEstado(resultado.getString("estado"));
                
                listaPrestamos.add(prestamo);
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally{
            conexion.cerrarConexion(con);
        }
        return listaPrestamos;
    }
    
    public int crearPrestamo(PrestamoBean prestamo){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.crearPrestamo());
            ps.setString(1, prestamo.getCliente());
            ps.setDate(2, prestamo.getFechaPrestamo());
            ps.setDouble(3, prestamo.getValor());
            ps.setInt(4, prestamo.getCuotas());
            ps.setDouble(5, prestamo.getCuotaMinima());
            ps.setInt(6, prestamo.getVigencia());
            ps.setString(7, prestamo.getEstado());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        } 
        return resultado;
    }
    
    public int modificarPrestamo(PrestamoBean prestamo){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.modificarPrestamo());
            ps.setString(1, prestamo.getCliente());
            ps.setDate(2, prestamo.getFechaPrestamo());
            ps.setDouble(3, prestamo.getValor());
            ps.setInt(4, prestamo.getCuotas());
            ps.setDouble(5, prestamo.getCuotaMinima());
            ps.setInt(6, prestamo.getVigencia());
            ps.setString(7, prestamo.getEstado());
            ps.setInt(8, prestamo.getIdPrestamo());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
    
    public int eliminarPrestamo(Integer idPrestamo){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.eliminarPrestamo());
            ps.setInt(1, idPrestamo);
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
}